from typing import List

from llama_index.core.agent.workflow import  FunctionAgent
from llama_index.core.indices.common.struct_store.sql import SQLStructDatapointExtractor
from llama_index.core.vector_stores import SimpleVectorStore
from llama_index.core.schema import  TextNode
from llama_index.core import Settings, SimpleKeywordTableIndex, SummaryIndex, get_response_synthesizer, \
    DocumentSummaryIndex, TreeIndex
from llama_index.embeddings.zhipuai import ZhipuAIEmbedding
from llama_index.core.graph_stores import SimplePropertyGraphStore
from llama_index.core.schema import Document
from pydantic import BaseModel

embed_model = ZhipuAIEmbedding(
    model="embedding-2",
    api_key="f387f5e4837d4e4bba6d267682a957c9.PmPiTw8qVlsI2Oi5"
    # With the `embedding-3` class
    # of models, you can specify the size
    # of the embeddings you want returned.
    # dimensions=1024
)
Settings.embed_model=embed_model

from llama_index.llms.deepseek import DeepSeek

llm = DeepSeek(model="deepseek-chat", api_key="sk-605e60a1301040759a821b6b677556fb")
Settings.llm = llm
from llama_index.core.extractors.metadata_extractors import (
    KeywordExtractor,
    PydanticProgramExtractor,
    QuestionsAnsweredExtractor,
    SummaryExtractor,
    TitleExtractor,
)
from llama_index.core.extractors.document_context import DocumentContextExtractor


# indices
from llama_index.core.indices.keyword_table.base import (
    GPTKeywordTableIndex,
    KeywordTableIndex,
)
from llama_index.core.indices.keyword_table.rake_base import (
    GPTRAKEKeywordTableIndex,
    RAKEKeywordTableIndex,
)
from llama_index.core.indices.keyword_table.retrievers import (
    KeywordTableGPTRetriever,
    KeywordTableRAKERetriever,
    KeywordTableSimpleRetriever,
)
from llama_index.core.indices.keyword_table.simple_base import (
    GPTSimpleKeywordTableIndex,
    SimpleKeywordTableIndex,
)

from llama_index.core import TreeIndex, SimpleDirectoryReader
from llama_index.core.node_parser import HierarchicalNodeParser




text='''
LlamaIndex作为大模型应用的核心数据框架，其关键技术体系涵盖数据处理、索引构建、查询优化及多模态集成等多个维度，以下从架构设计到实现细节展开分析：

一、数据连接与预处理技术
‌多源异构数据集成‌
支持PDF、数据库、API等20+数据源的连接器（Data Connectors），将非结构化/结构化数据统一转化为Document对象。通过模块化设计实现数据格式标准化，例如文本分块（Chunking）和节点（Node）化处理，每个节点对应文档的语义段落
9
10。关键步骤包括数据清洗、元数据标注和向量化预处理，确保后续索引效率
6
11。

‌动态数据加载机制‌
提供实时数据更新接口，支持增量索引构建。通过文档存储（Docstore）管理数据版本，结合时间戳实现数据变更检测，避免全量重建索引的开销
9。

二、索引构建与优化技术
‌多模态索引结构‌

‌向量存储索引（VectorStoreIndex）‌：基于FAISS或HNSW算法实现高维向量相似度搜索，适用于语义检索场景，支持GPU加速
6
11。
‌树形索引（TreeIndex）‌：层次化组织数据节点，通过自上而下的遍历优化复杂查询性能，适合文档摘要生成
11。
‌关键词表索引（KeywordTableIndex）‌：结合TF-IDF和BM25算法，提升精确关键词匹配效率
11。
‌知识图谱索引（PropertyGraphIndex）‌：构建实体关系网络，支持多跳推理查询
9。
‌混合索引策略‌
支持多索引联合查询（Hybrid Search），例如结合向量检索与关键词过滤，通过权重调节平衡召回率与精确率
5
11。索引管理层（IndexStore）实现索引的持久化与动态加载，降低内存占用
9。

三、查询引擎与响应合成
‌Agentic RAG架构‌
将检索增强生成（RAG）与智能体（Agent）技术融合，通过以下流程处理复杂查询：

‌动态规划‌：分解多步骤任务为子查询，例如先检索相关文档再提取实体
3
5。
‌工具调用‌：将数据接口封装为工具（Tools），智能体根据上下文选择调用顺序
3
9。
‌记忆机制‌：维护对话历史（Chat Memory），实现上下文感知的连续交互
3。
‌响应合成优化‌
采用重排序（Re-Ranking）技术筛选Top-K节点，通过Prompt工程组合检索结果与大模型输入。例如，使用模板化提示词（如“基于以下上下文回答：{context}”）减少幻觉生成
5
10。

四、模型集成与扩展
‌统一模型接口‌
抽象LLM、Embedding和多模态模型的调用规范，支持OpenAI、Llama等模型的即插即用。通过模型池（Model Pool）管理多实例负载均衡，优化推理成本
8
9。

‌嵌入模型适配‌
支持自定义嵌入模型（如BERT、Sentence-Transformers），提供维度对齐和归一化处理接口，确保跨模型向量兼容性
9。

五、多智能体协同系统
‌任务并行化‌
多智能体（Multi-Agents）分工处理查询解析、检索、生成等环节，例如：

‌专业化Agent‌：针对特定任务（如表格处理）微调模型
3
5。
‌协调框架‌：通过消息队列（如RabbitMQ）实现Agent间通信，解决资源竞争
3。
‌成本与延迟优化‌
采用异步执行管道和缓存机制，例如预计算高频查询的索引结果，减少实时计算压力
3
5。

六、企业级扩展能力
‌安全与权限控制‌
集成OAuth2.0和RBAC模型，实现数据访问的细粒度权限管理。支持私有化部署和加密索引，满足GDPR合规要求
5
8。

‌可观测性工具‌
提供查询日志、性能指标（如响应延迟、召回率）的监控面板，支持Prometheus集成
5。

七、应用场景与技术适配
‌复杂问答系统‌
通过多轮对话逐步细化查询（如“从小到大的检索”策略），先定位文档范围再提取细节。

‌结构化数据分析‌
将CSV、数据库表转化为结构化索引，支持SQL-like查询与可视化展示
6
7。

‌实时知识更新‌
结合流式数据处理框架（如Kafka），实现索引的秒级更新，适用于金融、新闻等领域
9。

八、性能调优技术
‌批处理与异步IO‌
大规模数据导入时启用批量插入（Bulk Insert），减少磁盘I/O次数
6。

‌分布式索引‌
支持水平分片（Sharding）和分布式计算（如Spark），实现亿级数据的高效检索
5
11。

总结来看，LlamaIndex的技术栈以模块化、可扩展为核心，覆盖从数据摄取到智能交互的全链路，其Multi-Agent和混合索引设计代表了RAG系统的前沿方向
3
5。未来演进可能聚焦于自动化索引配置与跨模态联合检索，进一步降低开发门槛。


'''

# 1. 加载文档
documents = [Document(text=text)]
 

# 2. 创建分层节点解析器
node_parser = HierarchicalNodeParser.from_defaults(
    chunk_sizes=[2048, 512, 128]  # 三级层次结构：大段 -> 段落 -> 句子
)
nodes = node_parser.get_nodes_from_documents(documents)

# 3. 构建TreeIndex
tree_index = TreeIndex(nodes)

# 4. 查询（默认使用自上而下检索）
query_engine = tree_index.as_query_engine(
    child_branch_factor=2  # 每层探索的分支数
)
response = query_engine.query("文档中提到的关键技术有哪些？")
print(response)

print("KKKKKKKKKKKKKKKK")